Zurück in SoftwareentwicklungWeiter in SoftwareentwicklungZurück in ProgrammierungWeiter in Elementare ProgrammentwicklungEntwicklungsphasen am Beispiel Bibliothek Zusammenfassung ?

Wir illustrieren die wichtigsten Phasen der Anwendungsentwicklung an einem stark vereinfachten Beispiel, dem Modul Monatliche Ausleihstatistik eines Projekts Bibliotheksanwendung.


1 Spezifikationsphase

Ausgangspunkt des Projektbeispiels sei die folgende Grobspezifikation:

Entwickeln Sie ein Modul, das eine Ausleihestatistik erstellt und wie folgt auf dem Bildschirm ausgibt:

AUSLEIHSTATISTIK FÜR DEN MONAT  F E B R U A R
Fachgebiet Ausgeliehene Titel
BWL ***************************************
VWL ***********************************
RECHT ****************************
SOZ./PSYCH. ************
ÜBRIGE ***************

Diese Grobspezifikation ist ungenau, weil sie Fragen nach der Benutzereingabe und der Ausgabeberechnung offen lässt. Eine feinere Spezifikation des Moduls Monatliche Ausleihstatistik könnte wie folgt aussehen:

Zweck

Zweck des Moduls ist die Bildschirmausgabe eines Histogramms (Balkendiagramms) der Ausleihhäufigkeiten in den Fachgebieten Betriebswirtschaftslehre (BWL), Volkswirtschaftslehre (VWL), Recht, Soziologie/Psychologie und Übrige.

Eingabe

Tastatureingaben sind die Ausleihhäufigkeiten der folgenden Fachgebiete: BWL, VWL, Oeffentliches Recht, Privates Recht, Soziologie, Psychologie und Übrige. Der Ausleihmonat wird als Zahl zwischen 1 bis 12 eingegeben.

Verarbeitung und -ausgabe

Das Histogramm visualisiert die relativen Ausleihhäufigkeiten der Fachgebiete BWL, VWL, Recht, Soziologie/Psychologie und Übrige. Die maximale Balkenlänge wird der grössten Häufigkeit zugeordnet. Die Häufigkeiten werden durch proportionale Balken aus dem Zeichen * dargestellt.

Spezifikation von TESTS


2 Modularisierungsphase

Ein Modul ist ein entwurfs- oder programmiersprachlicher Baustein, der Aufgaben löst, die eng verbunden sind. Ein einfaches Programmpaket zur Bibliotheksverwaltung lässt sich entwurfssprachlich wie folgt modularisieren:

Bibliotheksverwaltung
    Ausleihverkehr buchen
       Stammdaten verwalten
          Dokumente verwalten
          Benutzer verwalten
       Statistiken erstellen
          Dokumentestatistiken
          ...
               Monatliche Ausleihstatistik
          ...
          Benutzerstatistiken
      ...
    ...

Die Beziehung zwischen den Modulen ist hierarchisch. Eingerückte Module gehören zu den weiter oben ausgerückten Modulen. Dokumente verwalten gehört zum Beispiel zu den Vatermodulen Stammdaten verwalten und Ausleihverkehr buchen. Eine solche Einrückungsliste von Modulen nennt man Modulhierarchie. Die obige Modulhierarchie ist unvollständig. Wir werden ausserdem nur eines der dargestellten Teilprobleme vertiefen, nämlich das Modul Monatliche Ausleihstatistik.

Modulhierarchie von TESTS


3 Algorithmisierungsphase

Zu Beginn der Spezifikation und des Entwurfs hilft oft das EVA-Prinzip. Es zerlegt die Modulaufgaben in Eingabe, Verarbeitung und Ausgabe:

Eingabe:       Ausleihhäufigkeiten und -monat einlesen
Verarbeitung:  Ausgabe des Histogramms vorbereiten
Ausgabe:       Histogramm auf dem Bildschirm ausgeben

Als Nächstes verfeinern wir jeden EVA-Schritt in einer Einrückungsliste:

Ausleihhäufigkeiten und -monat einlesen
    Programmtitel ausgeben
        Für jede Ausleihhäufigkeit:
            Prompt "Ausleihhäufigkeit"
            Ausleihhäufigkeit lesen
            Ausleihhäufigkeit prüfen
    Prompt "Ausleihmonat"
    Monatszahl lesen
    Monatszahl prüfen

Ausgabe des Histogramms vorbereiten
    Maximale Häufigkeit ermitteln

Histogramm auf dem Bildschirm ausgeben
    Ausgabetitel ausgeben
    Spaltenbezeichner ausgeben
    Für jede Ausgabehäufigkeit:
        Zeilenbezeichner ausgeben
        Balken ausgeben

Wir haben diese EVA-Verfeinerung in Pseudocode beschrieben. Pseudocode (auch Entwurfscode genannt) abstrahiert vom späteren Programmcode und umfasst deshalb wesentlich weniger Zeilen. Ausserdem ist die Syntax von Pseudocode einfacher als jene von Programmcode.

Modulbeschreibungen und Entwurfscode


4 Codierungsphase

Vorlagen und Makrocode

Eine Endbenutzerin kann Software an ihre Bedürfnisse anpassen, ohne gleich Code zu schreiben. Verbreitete Möglichkeiten der Anpassung (engl. customization) sind Vorlagen und Makros. Vorlagen (engl. templates) spielen vor allem in der Textverarbeitung und Tabellenkalkulation eine Rolle. Ein Textverarbeitungspaket erlaubt zum Beispiel die Definition von Textvorlagen aus Konstanten und Variablen (Leerstellen oder Platzhalter). Der Ersteller eines Serienbriefs verknüpft zum Beispiel die Platzhalter einer Vorlage mit Feldern einer Datenbank. Das Textverarbeitungsprogramm kann dann zum Beispiel aktuelle Adressdaten abrufen und vor dem Druck mit der Vorlage verknüpfen. In Serienbriefen sind neben der Adresse die Anrede und die Grussformel verbreitete Platzhalter.

Verlangt das Ausfüllen einer Vorlage viele manuelle Arbeitsschritte, so kann der Endbenutzer eine Folge von Tasten- und Mausaktionen als Makro aufzeichnen und später beliebig oft abspielen. Oft ist ein Makro der erste Schritt zur Entwicklung eines eigenen Programms. Excel und Access erlauben den Ausbau von Makros zu VBA-Programmen. Ein Makro automatisiert eine kleine Routineaufgabe, indem es mehrere Aktionen aufzeichnet und unter einem Namen zusammenfasst. In einfachen Editoren fehlt zum Beispiel oft eine Funktion, die den Text einer Zeile automatisch unterstreicht. Der Benutzer kann in diesem Fall den Makrorekorder einschalten, den Titel manuell unterstreichen und dann die Aufzeichnung beenden. Das generierte Makroprogramm kann der Benutzer zum Beispiel Unterstreiche_die_laufende_Zeile nennen:

Macro Unterstreiche_die_laufende_Zeile
  JumpToBeginningOfNextLine
  For LineLength Times Write ‘-’
End Macro

Der Code aufgezeichneter Makroprogramme lässt sich nachträglich anpassen. In unserem Beispiel kann der Benutzer etwa das Unterstreichungszeichen '-' durch '*' ersetzen. Wer über Programmierkenntnisse verfügt, kann das Makro auch als Grundlage eines eigenen Programms verwenden. Das obige Makro enthält bereits die wichtigsten Elemente von Programmen:

Programmcode

Wir verfeinern nur einen kleinen Teil der Algorithmisierungsphase, nämlich die Datenstruktur und den Ablauf des Untermoduls Maximale Häufigkeit ermitteln. Eine Struktur, die eine Liste gleichartiger Daten speichert, heisst Datenfeld (engl. array). Das folgende Datenfeld heisst Ausleihäufigkeiten und speichert die Ausleihhäufigkeiten der ausgeliehenen Bücher:

i

1

2

3

4

5

Ausleihhäufigkeiten

200

100

500

300

400

(Fach

BWL

VWL

Recht

Psych./Soz.

Übrige)

Der Befehl Ausleihhäufigkeiten(i) greift auf die i-te Zelle des Datenfelds Ausleihhäufigkeiten zu. Der folgende VBA-Code geht durch alle Werte dieses Datenfelds und ermittelt die maximale Ausleihhäufigkeit. Wir benötigen diese für die Berechnung der Balkenlängen des Histogramms. Im Gegensatz zum Entwurfscode der Algorithmisierungsphase kann VBA-Code von einem Rechner ausgeführt werden:

Maximum = Ausleihhäufigkeiten(1)
For i = 2 To 5
  If Ausleihhäufigkeiten(i) > Maximum Then
    Maximum = Ausleihhäufigkeiten(i)
  End If
Next i

Die erste Zeile weist einer Speicherzelle Maximum die Ausleihhäufigkeit von BWL zu. Die restlichen Zeilen lesen nacheinander die Elemente 2 bis 5 von Ausleihhäufigkeiten. Die Zeile nach Then überschreibt die Speicherzelle Maximum mit dem laufenden Element, sobald dieses grösser als der bisherige Inhalt von Maximum ist (Das Symbol = vergleicht also hier nicht zwei Werte, sondern überschreibt den Wert der Speicherzelle Maximum mit dem Wert von Ausleihhäufigkeit(i)). Nach dem Lesen aller Elemente des Datenfelds steht in Maximum die grösste Ausleihhäufigkeit. Ein vollständiges VBA-Programm zur Bestimmung des Maximums finden Sie in Maximum.xls.

Entwicklung von TESTS

Der Abschnitt Codierungsphase hat die Programmkonzepte Datenfeld, Entscheidung und Wiederholung eingeführt. Die folgenden Themen vertiefen diese Konzepte in VBA:


Exkurs zur gegenseitigen Beeinflussung von Entwicklungsphasen

Die Codierung hängt von der Spezifikation, dem Dialogentwurf, der Modularisierung und der Algorithmisierung ab. Idealerweise sollten die vorgelagerten Phasen aber nicht von späteren Implementationseinschränkungen beeinflusst werden. Leider sieht die Praxis aber oft anders aus - vor allem dann, wenn sich der spätere Programmcode auf mehrere Plattformen verteilt. Beispiele sind Anwendungen, die Clientrechner über das Internet mit Server-Datenbanken verbinden:

In einem solchen Fall ist es unumgänglich, bereits in den vorgelagerten Phasen an die spätere Codierung zu denken.